package pl.wroc.pwr.mss.server.ui.menu;

import javax.swing.JPopupMenu;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;

import pl.wroc.pwr.mss.server.ui.tables.JPlaylistTable;

/**
 * Menu typu popup do uzytku tabeli z playlistami.
 * 
 * @author mjagus
 */
public class JPlaylistPopupMenu extends JPopupMenu implements PopupMenuListener
{
    /**
     * Identyfikator klasy.
     */
    private static final long serialVersionUID = -1324249170950677586L;

    /**
     * Tabela z playlistami.
     */
    private JPlaylistTable playlistTable;

    /**
     * Pozycja w menu otwierajaca okno dialogowe tworzenia nowej playlisty.
     * Zawsze widoczna.
     */
    private JCreateNewMenuItem createNewMenuItem;

    /**
     * Pozycja w menu usuwajaca playlisty wybrane na tabeli playlist.
     * Widoczna tylko wtedy, gdy conajmniej jedna platlista jest wybrana.
     */
    private JRemoveSelectedMenuItem removeSelectedMenuItem;

    /**
     * Iniciuje komponent.
     */
    public JPlaylistPopupMenu()
    {
        super();

        super.addPopupMenuListener(this);
    }

    /**
     * Iniciuje komponenty tego menu.
     */
    public void initComponents()
    {
        super.add(createNewMenuItem);
        super.add(removeSelectedMenuItem);
    }

    /**
     * @return Tabela z playlistami
     */
    public JPlaylistTable getPlaylistTable()
    {
        return playlistTable;
    }

    /**
     * @param playlistTable Tabela z playlistami
     */
    public void setPlaylistTable(JPlaylistTable playlistTable)
    {
        this.playlistTable = playlistTable;
    }

    /**
     * @return Pozycja w menu otwierajaca okno dialogowe tworzenia nowej
     * playlisty
     */
    public JCreateNewMenuItem getCreateNewMenuItem()
    {
        return createNewMenuItem;
    }

    /**
     * @param createNewMenuItem Pozycja w menu otwierajaca okno dialogowe
     * tworzenia nowej playlisty
     */
    public void setCreateNewMenuItem(JCreateNewMenuItem createNewMenuItem)
    {
        this.createNewMenuItem = createNewMenuItem;
    }

    /**
     * @return Pozycja w menu usuwajaca playlisty wybrane na tabeli playlist
     */
    public JRemoveSelectedMenuItem getRemoveSelectedMenuItem()
    {
        return removeSelectedMenuItem;
    }

    /**
     * @param removeSelectedMenuItem Pozycja w menu usuwajaca playlisty wybrane
     * na tabeli playlist
     */
    public void setRemoveSelectedMenuItem(JRemoveSelectedMenuItem removeSelectedMenuItem)
    {
        this.removeSelectedMenuItem = removeSelectedMenuItem;
    }

    @Override
    public void popupMenuCanceled(PopupMenuEvent e) {}

    @Override
    public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}

    @Override
    public void popupMenuWillBecomeVisible(PopupMenuEvent e)
    {
        removeSelectedMenuItem.setVisible(playlistTable.getSelectedRowCount() > 0);
    }

}
